Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3.4.6 自动调优 #105

Merged
merged 2 commits into from
Mar 31, 2024
Merged

Conversation

youxiudeshouyeren
Copy link
Contributor

No description provided.

@@ -1,9 +1,203 @@
# Auto-Tuning原理

> 待更新中,卷的不行了卷得不行了!ZOMI 一个人晚上下班后才能更新视频和文章,如果您有兴趣也非常希望您能够参与进来(Github Issues 区留言或者B站私信ZOMI哦),一起写AI系统,一起分享AI系统的知识。
DNN部署的硬件平台越来越多样化,包括cpu、gpu、fpga和asic,这些硬件平台内部又具有不同的资源。为了在这些平台上部署dnn,需要对dnn中使用的算子使用高性能的张量程序。传统方式为使用算子库,算子库包含了大量的预定义算子(Operators),这些算子是构建和执行深度学习模型的基本单元。例如对于cuda平台,使用cudnn库,预先由工程师编写兼容某种gpu硬件平台的大量算子,在运行时直接调用。然而这种传统方式面临着越来越多的挑战:
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

分多级目录出来。先介绍本节的内容。

> 待更新中,卷的不行了卷得不行了!ZOMI 一个人晚上下班后才能更新视频和文章,如果您有兴趣也非常希望您能够参与进来(Github Issues 区留言或者B站私信ZOMI哦),一起写AI系统,一起分享AI系统的知识。
DNN部署的硬件平台越来越多样化,包括cpu、gpu、fpga和asic,这些硬件平台内部又具有不同的资源。为了在这些平台上部署dnn,需要对dnn中使用的算子使用高性能的张量程序。传统方式为使用算子库,算子库包含了大量的预定义算子(Operators),这些算子是构建和执行深度学习模型的基本单元。例如对于cuda平台,使用cudnn库,预先由工程师编写兼容某种gpu硬件平台的大量算子,在运行时直接调用。然而这种传统方式面临着越来越多的挑战:

+ 优化手段的多样性:如前面的章节介绍,存在循环优化、存储优化、指令优化等多种优化方式,在编写程序时如何使用和编排这些优化是十分困难的事,不仅与硬件平台相关,也与要执行的程序相关,程序参数例如卷积核大小、特征图大小的变化也会影响优化方式的选择,再加上各种优化还涉及其优化因子如循环分块因子的选择。软硬件的组合使得编写一套高性能的算子库十分的耗费精力。
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

然后是 ## Auto-Tuning 原理介绍


+ 优化手段的多样性:如前面的章节介绍,存在循环优化、存储优化、指令优化等多种优化方式,在编写程序时如何使用和编排这些优化是十分困难的事,不仅与硬件平台相关,也与要执行的程序相关,程序参数例如卷积核大小、特征图大小的变化也会影响优化方式的选择,再加上各种优化还涉及其优化因子如循环分块因子的选择。软硬件的组合使得编写一套高性能的算子库十分的耗费精力。
+ 优化方式的通用性:程序优化方式的选择受到多种因素影响,很难有一个通用的方式能覆盖所有场景,普遍的方式是为每一种硬件的每一套参数都维护一个算子实现。以卷积算子为例,这是深度学习中最常用的算子之一。在不同的硬件上,卷积算子的实现可能会有很大差异。在CPU上,卷积算子可能会使用高度优化的库,如Intel的MKL或OpenBLAS,这些库针对特定的CPU架构进行了优化,可以利用SIMD指令集等硬件特性来加速计算。在GPU上,卷积算子的实现通常会利用CUDA或OpenCL等并行计算框架。GPU的高并行性使得卷积操作可以通过并行化来大幅加速。此外,不同的GPU架构(如NVIDIA的Volta、Turing等)可能需要不同的优化策略。
+ 软硬件的快速更迭:随着新的处理器架构和专用AI加速器的不断涌现,硬件平台变得更加多样化。每种硬件都有其独特的特性和优化需求,算子库需要为这些不同的硬件提供定制化的算子实现,这大大增加了开发和维护的工作量。每当NVIDIA发布新的CUDA版本,引入新的GPU指令集时,算子库开发者必须更新GPU算子,以利用这些新特性来提升性能。再比如新的算子不断涌现,现在的卷积已经有几十种卷积,各种激活函数也在不断提出。每提出一个新算子,就需要在目标硬件平台实现一套算子库。
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

注意格式,去掉前面空行,然后短语段落之间空行。


自动调优可以显著提高AI应用的运行效率,尤其是在深度学习等计算密集型任务中。然而,由于AI应用的多样性和复杂性,自动调优仍然是一个活跃的研究领域,研究人员和工程师们正在不断探索更高效、更智能的调优方法。在自动调优中,TVM是走在前列的AI编译器,其自动调优系统已经历经三代,本章将介绍TVM的这三代自动调优系统。

## AutoTVM
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

下面内容过多,尽可能分开几个 ### 三级来展开


以上框架的关键组件有:

- 代码生成器:不同的调度配置会导致不同的循环结构、内存存取顺序等,生成的代码大不相同,这里使用了TVM的代码生成。
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

同样需要注意格式

- 代价模型:调度搜索空间是巨大的,穷举一遍是不可能的。代价模型的作用是不断修正调度配置,选出相对最佳的配置,减少调优时间,或者说在固定的调优时间达到更好的性能。
- 硬件测量环境:AutoTVM有RPC tracker,可以启动多个硬件平台进行调优。

## Ansor
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ansor 介绍

@chenzomi12 chenzomi12 merged commit 2cdd38e into chenzomi12:main Mar 31, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants